]> dgit.raspbian.org Git - gnome-shell.git/commitdiff
status/volume: Handle scroll events distinctly
authorCarlos Garnacho <carlosg@gnome.org>
Mon, 18 Aug 2025 16:55:32 +0000 (18:55 +0200)
committerFlorian Müllner <fmuellner@gnome.org>
Fri, 29 Aug 2025 22:55:47 +0000 (00:55 +0200)
Stop funneling the events to the (maybe hidden) volume
slider actor, and handle events directly at the volume
status icon.

This allows us to move it back to vertical motion, since
there are no cues to make us think scroll should be
horizontal here. The slider will still prefer horizontal
motion.

Part-of: <https://gitlab.gnome.org/GNOME/gnome-shell/-/merge_requests/3842>

js/ui/status/volume.js

index f966fbb853ffd9e078c73a96df3ecd463cb5b97c..b8f8d8fb40d68636925645fcfcfb4b8a9153b2e5 100644 (file)
@@ -433,12 +433,27 @@ class VolumeIndicator extends SystemIndicator {
     }
 
     _handleScrollEvent(item, event) {
-        const result = item.slider.scroll(event);
-        if (result === Clutter.EVENT_PROPAGATE || item.mapped)
-            return result;
+        if (event.get_flags() & Clutter.EventFlags.FLAG_POINTER_EMULATED)
+            return Clutter.EVENT_PROPAGATE;
+
+        let direction = event.get_scroll_direction();
+        let nSteps = 0;
+        if (direction === Clutter.ScrollDirection.DOWN) {
+            nSteps = -1;
+        } else if (direction === Clutter.ScrollDirection.UP) {
+            nSteps = 1;
+        } else if (direction === Clutter.ScrollDirection.SMOOTH) {
+            let [, dy] = event.get_scroll_delta();
+            nSteps = -dy;
+            // Match physical direction
+            if (event.get_scroll_flags() & Clutter.ScrollFlags.INVERTED)
+                nSteps *= -1;
+        }
+
+        if (item.mapped || item.slider.step(nSteps))
+            item.showOSD();
 
-        item.showOSD();
-        return result;
+        return Clutter.EVENT_STOP;
     }
 });